# @Time : 2024-10-24 13:59
# @Author : Fioman 
# @Phone : 13149920693
"""
在单继承的关系中,super()调用的是父类,但是如果是多继承的话,super()的调用规则是沿用
MRO(Method Resolution Order) 来查找的 属性查找顺序 super()会根据这个表调用下一个类的方法,
而不一定是直接的父类
1) Python2的时候通常使用super(SubClass,self)来显示传递子类和实例对象
2) Python3 直接使用无参super().method_name() 自动确定调用的子类和实例对象
"""


class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        print(f"{self.name} 正在叫")


class Dog(Animal):
    def __init__(self, name, bread):
        super().__init__(name)  # 调用父类的__init__方法
        self.bread = bread

    def speak(self):
        super().speak()
        print(f"这个狗的品种是 : {self.bread}")


dog = Dog("Bubby", "黄毛")
dog.speak()


class A:
    def __init__(self):
        print("A")


class B(A):
    def __init__(self):
        print("B")
        super().__init__()


class C(A):
    def __init__(self):
        print("C")
        super().__init__()


class D(B, C):
    def __init__(self):
        print("D")
        super().__init__()


d = D()  # D B C A    在B中调用的super()直接调用了C的super(),而不是他的父类的A的__init__()方法
print(D.__mro__)  # 这个__mro__和上面的调用顺序是一致的
